package com.ruoyi.water.controller;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.water.service.WaterTokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 盛帆节能平台令牌管理控制器
 * 提供「获取有效令牌」「清除令牌缓存」等HTTP接口
 */
@RestController
@RequestMapping("/api/water/token/")
public class WaterTokenController {

    @Autowired
    private WaterTokenService tokenService;

    /**
     * 获取有效访问令牌
     * <p>自动处理「Redis缓存读取、接口请求、令牌刷新」全流程</p>
     * @return AjaxResult 若依统一响应体（包含access_token或错误信息）
     */
    @GetMapping("/effective")
    public AjaxResult getEffectiveAccessToken() {
        try {
            String accessToken = tokenService.getEffectiveAccessToken();
            return AjaxResult.success("令牌获取成功", accessToken);
        } catch (Exception e) {
            return AjaxResult.error("令牌获取失败：" + e.getMessage());
        }
    }

    /**
     * 清除Redis中的令牌缓存
     * <p>用于「登出、切换账号、强制刷新令牌」等场景</p>
     * @return AjaxResult 操作结果
     */
    @PostMapping("/clear")
    public AjaxResult clearTokenCache() {
        tokenService.clearTokenCache();
        return AjaxResult.success("令牌缓存已清除");
    }

    /**
     * 测试：携带令牌调用平台接口（示例：查询表具档案）
     * <p>演示「获取令牌后，如何携带token调用平台业务接口」</p>
     * @param pageSize 分页大小
     * @param pageNum 页码
     * @return AjaxResult 表具档案数据（或错误信息）
     */
    @GetMapping("/meter")
    public AjaxResult demoMeterQuery(
            @RequestParam Integer pageSize,
            @RequestParam Integer pageNum) {
        try {
            // 1. 获取有效令牌（实际业务中，此步骤可在拦截器/过滤器中统一处理）
            String accessToken = tokenService.getEffectiveAccessToken();

            // 2. 模拟调用平台“表具档案查询”接口（此处仅为演示，需替换为真实业务Service）
            // MeterArchiveService meterService = ...;
            // Map<String, Object> result = meterService.findMeterByCondition(pageSize, pageNum, 0, null);

            // 临时模拟返回（实际需替换为真实业务逻辑）
            return AjaxResult.success("令牌携带测试成功",
                    "access_token: " + accessToken + ", 可携带此token调用平台业务接口");
        } catch (Exception e) {
            return AjaxResult.error("测试调用失败：" + e.getMessage());
        }
    }
}